// 全局前置路由 beforeEach

import router from '@/router'
// 因为不在 . vue文件 没有this.$store 需要自己引入
import store from '@/store'
// 导航守卫
router.beforeEach(async(to, from, next) => {
  // 默认有三个参数 toString,from,next
  if (store.state.user.token) {
    //   1、有token  放行
    // 咱们有个需求，如果用户遇见登陆过，不希望重复登录
    // 1.1 如果还去登录页=>首页
    if (to.path === '/login') {
      next('/')
    } else {
      // 1.2其他页面随便放行
      // 为了不需要在每个用到的页面重新调用获取用户数据
      // 者进入页面前, 咱们就检查一下, 有没有数据, 没有就发请求
      // 不能直接判断对象存在与否, 因为永远都是 true
      // 要判断其中 key 键的数量 如果为 0 就是没有任何数据
      // if (!store.state.user.userInfo) {
      if (Object.keys(store.state.user.userInfo).length === 0) {
        await store.dispatch('user/getUserInfo')
        // 这里是登录后跳转页面，发现没有数据，进而获取用户信息位置
        // 执行完这一步,我们可以确认用户数据已经存在(包括权限)
        // 个人信息中的所有权限列表
        const menus = store.state.user.userInfo.roles.menus
        // 调用vuex里面的action进行筛选
        const routes = await store.dispatch('permission/filterRoutes', menus)
        console.log(30, routes)
        router.addRoutes([
          ...routes,
          { path: '*', redirect: '/404', hidden: true }
        ])
        next(to.path)
        console.log('menus28获取个人信息里的权限', menus)
        return
      }
      next()
    }
  } else {
    // 2、没有token
    // 2.1 哪怕没登录，也是有些页面可以进入的，如 登录页，404，测试
    const whiteList = ['/login', '/404', '/test']
    if (whiteList.indexOf(to.path) > -1) {
      next()
    } else {
      // 2.2不在白名单=>跳转到登录页
      next('/login')
    }
  }
})
